home *** CD-ROM | disk | FTP | other *** search
/ 3D GFX / 3D GFX.iso / pcutils / windows / genesis / include / tool.h < prev   
C/C++ Source or Header  |  1995-12-30  |  9KB  |  183 lines

  1. /*------------------------------------------------------------------
  2.             Tool Include
  3.             ------------
  4.  
  5.     This is the main tool include file. Any tool DLLs should
  6.     include this file as it contains the interface for the
  7.     tool base class from which all tools are derived. It
  8.     also provides the prototypes for the main DLL entry points
  9.     used to create and delete the tool object (NB. The editor
  10.     code cannot create a derived class it doesn't know about)
  11.  
  12.     (C) Silicon Dream Ltd 1994
  13.  
  14.   ------------------------------------------------------------------
  15.  
  16. Changes:                        Date:
  17. * Created file                        27/12/94
  18. */
  19.  
  20. #ifndef TOOL
  21. #define TOOL
  22.  
  23. #define STRICT        // For correct HDC definition, otherwise derived tools get linker error
  24. #include <windows.h>
  25. #include <atomic.h>
  26. #include <cppmaths.h>
  27. #include <cppdebug.h>
  28. #include <geometry.h>
  29.  
  30. /* Used by tool to inform editor what to redraw after a tool action */
  31.  
  32. typedef enum Redraw{REDRAW_ALL=0,        // Re-renders and redraws overlay
  33.             REDRAW_NONE,        // No redraw
  34.             REDRAW_TOOL,        // Redraw ONLY using tools DrawSoFar() routine
  35.             REDRAW_NOTOOL,        // Refreshes screen from bitmaps and thats all
  36.             REDRAW_REFRESH,        // Refreshes screen from bitmaps and calls DrawSoFar()
  37.             REDRAW_OBJECT_WIRE,        // Redraw current object only direct to screen in XOR
  38.             PRIVATE_REDRAW_OVERLAY};    // Reserved
  39.  
  40. /* Tool callback codes and router function definition */
  41.  
  42. #define CT_WRITEMESSAGE        0
  43. #define CT_SETVIEWDATA        1
  44. #define CT_ADDNAMEDOBJ        2
  45. #define CT_ADDNAMEDCSYS        3
  46. #define CT_DELNAMEDOBJ        4
  47. #define CT_DELNAMEDCSYS        5
  48. #define CT_GETSELOBJECTS    6
  49. #define CT_GETOBJHANDLE        7
  50. #define CT_GETCSYSHANDLE    8
  51. #define CT_GETOBJNAME        9
  52. #define CT_GETCSYSNAME        10
  53. #define CT_UPDATEVIEWS        11
  54. #define CT_ACTIVATECSYSWIN    12
  55. #define CT_GETCURRENTSURF    13
  56.  
  57. typedef ulong _exp fnToolCallback(void *pvDoc, ushort usCallType,
  58.                   ulong ul1, ulong ul2, ulong ul3);
  59.  
  60. /* Marker types */
  61.  
  62. #define MT_BOX        0
  63. #define MT_PLUS        1
  64. #define MT_CROSS    2
  65. #define MT_DIAMOND    3
  66.  
  67. /* Flags for DrawArrow */
  68.  
  69. #define DA_FILLED        1
  70. #define DA_FIXEDSIZE        2
  71.  
  72. /* Maximum list object name length */
  73.  
  74. #define MAX_NAME_BUFF_LEN    35    // To allow for null and digits
  75. #define MAX_NAME_LEN        30
  76.  
  77. /* Notice all the functions in the Tool class are virtual as it serves
  78.    purely as a polymorphic interface for derived classes. The functions
  79.    implemented in the Tool class do nothing. We cannot however make them
  80.    pure virtual as we would then have an abstract class, and derived tools
  81.    would be required to implement every function otherwise they too would
  82.    become abstract classes (ie. we wouldn't be able to create one) */
  83.  
  84. class Tool
  85.     {
  86.     private:
  87.         void        *pvDoc;                // Ptr to document object
  88.         fnToolCallback    *ToolCallback;            // Callback entry point to editor
  89.         ulong        ulMaxVerts, ulMaxNorms, ulMaxPats;
  90.         HanObject    hobjPrim;
  91.         bool        bReportErrs, bUndoOnErr;
  92.  
  93.     public:
  94.         HINSTANCE    hinst;                // Instance of DLL
  95.         HWND        hwnd;                // Main frame window
  96.         HanVertex    *ahverPrim, hverPrim;        // Primitive vertex handle array
  97.         HanNormal    *ahnorPrim, hnorPrim;        // Primitive normal handle array
  98.         HanPatch    *ahpatPrim;            // Primitive patch handle array
  99.         ulong        ulNumVerts, ulNumNorms, ulNumPats; // Numbers of elements
  100.         HanCoorSys    hcsysTopLevel;            // Documents top level coor sys
  101.         HanCoorSys    hcsysOnSelect;            // Active coor sys when tool selected
  102.         HanSurf        hsurOnSelect;            // Current surface when tool selected
  103.  
  104.     public:
  105.         // Overideables
  106.  
  107.         virtual _cppdyn ~Tool();            // Destructor
  108.         virtual void _cppdyn Initialise();        // Called once when DLL loaded
  109.         virtual Redraw _cppdyn OnSelect(Vec &vec);    // Called when tool is selected
  110.         virtual Redraw _cppdyn OnUnSelect(bool *pbOkToChange); // Called when tool is selected
  111.         virtual void _cppdyn OnConfigure();        // Called to configure tool
  112.         virtual Redraw _cppdyn OnButtonDown(Vec &vec);    // Called when button pressed
  113.         virtual Redraw _cppdyn OnMouseMove(Vec &vec);    // Called when mouse moves with button down
  114.         virtual Redraw _cppdyn OnButtonUp(Vec &vec);    // Called when button is released
  115.         virtual Redraw _cppdyn OnSet(Vec &vec);        // Called when the 'Set' button is clicked
  116.         virtual Redraw _cppdyn OnUndo();        // Called when user wishes to undo effect of tool
  117.         virtual Redraw _cppdyn OnDo(Vec &vec);        // Called to end use of tool
  118.         virtual void _cppdyn OnViewChange(HanCoorSys hcsys, Vec &vec); // Called when active view changes
  119.         virtual void _cppdyn DrawSoFar(HDC hdc, HanCoorSys hcsys,
  120.                            void *pvViewData, bool bInvalid); // Called to draw object so far into the view
  121.  
  122.         // Tool support functions
  123.  
  124.         void _cppdyn WriteMessage(int iResId);        // Call to write message in status bar
  125.         void _cppdyn WriteMessage(const char *szMsg);    // Call to write message in status bar
  126.         int _cppdyn MessageBox(int iTitleId, int iMsgId, UINT uiStyle=MB_ICONEXCLAMATION); // Call to create message box
  127.         int _cppdyn MessageBox(int iTitleId, const char *szMsg, UINT uiStyle=MB_ICONEXCLAMATION); // Call to create message box
  128.         int _cppdyn MessageBox(int iTitleId, GeomErr gerr); // Call to create message box
  129.         void _cppdyn EndPrim (void);            // Removes buffers for handles
  130.         bool _cppdyn StartPrim (HanObject hobj, ulong ulMaxVerts, // Allocate buffers for handles
  131.                     ulong ulMaxNorms, ulong ulMaxPats,
  132.                     bool bReportErrs, bool bUndoOnErr);
  133.         void _cppdyn RemovePrim (void);            // Removes all primitive elements (verts etc.)
  134.         GeomErr _cppdyn AddVertex (Vec &vec);        // Adds a vertex (records handle)
  135.         GeomErr _cppdyn AddNormal (Vec &vec);        // Adds a normal (records handle)
  136.         GeomErr _cppdyn DefPatch (ushort usNumEdges, ushort usFlags, float fSmoothAng, // Adds a patch (records handle)
  137.                       HanVertex *ahver, HanNormal *ahnor, HanSurf hsur=NULL_HANDLE);
  138.         HanObject _cppdyn AddObject(HanCoorSys hcsys, char *szName, // Adds a new named object
  139.                         ushort usBuffSize, float fNewVertTol, HanObject hobj);
  140.         HanCoorSys _cppdyn AddCoorSys(HanCoorSys hcsysParent, char *szName, // Adds a new named coor sys
  141.                           ushort usBuffSize, HanCoorSys hcsys,
  142.                           Mat &matToParent, Mat &matFromParent,
  143.                           ushort usType, bool bAddView);
  144.         bool _cppdyn DelObject(const char *szName);    // Removes a named object
  145.         bool _cppdyn DelCoorSys(const char *szName);    // Removes a named coor sys
  146.         ushort _cppdyn GetSelectedObjects(char *szNames, ushort usBuffSize); // Returns names of selected objects
  147.         HanObject _cppdyn GetObjectHandle(const char *szName);// Returns the handle of a named object
  148.         HanCoorSys _cppdyn GetCoorSysHandle(const char *szName);// Returns the handle of a named coor sys
  149.         void _cppdyn GetObjectName(HanObject hobj, char *szName, // Returns the name of the object with the handle
  150.                        ushort usBuffSize);
  151.         void _cppdyn GetCoorSysName(HanCoorSys hcsys, char *szName, // Returns the name of the coor sys with the handle
  152.                         ushort usBuffSize);
  153.         void _cppdyn DrawMarker(HDC hdc, int iX, int iY, ushort usType); // Draws a marker on the DC
  154.         void _cppdyn DrawArrow(HDC hdc, int iX, int iY, ushort usFlags); // Draws an arrow onto the DC
  155.         void _cppdyn SetViewData(void *pvData, ushort usSize); // Sets data for all views
  156.         void _cppdyn BackgroundYield(const char *szWrite=NULL);// Yields control and writes message
  157.         void _cppdyn ForceRedraw(Redraw rd, HanCoorSys hcsys=NULL_HANDLE); // Forces a redraw independently of event
  158.         bool _cppdyn ActivateCSysWin(HanCoorSys hcsys);    // Activates coor sys window (brings to top)
  159.         HanSurf _cppdyn GetCurrentSurf();        // Returns handle to currently selected surface
  160.         void _cppdyn ModifiedScene();            // Mark scene as modified by this tool
  161.  
  162.         // Editor support functions (not for use by derived tools)
  163.  
  164.         void _cppdyn Initialise(HINSTANCE hinstDLL,
  165.                     void *pvDocIn,
  166.                     HWND hwnd,
  167.                     fnToolCallback *ToolCallbackIn,
  168.                     HanCoorSys hcsysDocTop); // Called to initialise base class
  169.         Redraw _cppdyn OnSelect(HanCoorSys hcsysActive, HanSurf hsurCurrent,
  170.                     Vec &vec);        // Called to initialise tools public data
  171.     };
  172.  
  173. /* The IMPLEMENT_OBJECT macro implements the CreateTool and DeleteTool functions, and the
  174.    typedefs are used by the editor to call the function */
  175.  
  176. #define IMPLEMENT_OBJECT(class) _st class tool; extern "C" { \
  177. Tool *_getdyn CreateTool() {return New class;} \
  178. void _getdyn DeleteTool(Tool *ptool) {Delete ptool;}}
  179. typedef Tool *_getdyn fnCreateTool();
  180. typedef void _getdyn fnDeleteTool(Tool *ptool);
  181.  
  182. #endif
  183.